
#Область ОбработчикиСобытийФормы


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Картинка = Новый Картинка;
	Если Параметры.Свойство("ХранилищеКонтейнераЗначения") Тогда
		ВозвратХранилищаДляКонтейнераЗначения = Истина;
		//@skip-check unknown-form-parameter-access
		ХранилищеКонтейнтейнера = Параметры.ХранилищеКонтейнераЗначения;//см. УИ_ОбщегоНазначенияКлиентСервер.НовыйХранилищеЗначенияТипаКартинка
		
		Если ХранилищеКонтейнтейнера <> Неопределено Тогда
			Картинка = УИ_ОбщегоНазначенияКлиентСервер.ЗначениеИзХранилищаКонтейнераКартинки(ХранилищеКонтейнтейнера);
		КонецЕсли;
	ИначеЕсли Параметры.Свойство("Картинка") Тогда 
		//@skip-check unknown-form-parameter-access
		Картинка = Параметры.Картинка;
	КонецЕсли;
	ПоместитьКартинкуВоВременноеХранилище(Картинка);	
	УстановитьПараметрыКартинкиНаФорме(Картинка);
КонецПроцедуры



#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

// Код процедур и функций

#КонецОбласти

#Область ОбработчикиКомандФормы


&НаКлиенте
Процедура Применить(Команда)
	Картинка = КартинкаИзВременногоХранилища();
	
	Если ВозвратХранилищаДляКонтейнераЗначения Тогда
		ВозвращаемоеЗначение = УИ_ОбщегоНазначенияКлиентСервер.ЗначениеХранилищаКонтейнераКартинки(Картинка);
	Иначе
		ВозвращаемоеЗначение = Картинка;
	КонецЕсли;
	
	Закрыть(ВозвращаемоеЗначение);
КонецПроцедуры

&НаКлиенте
Процедура Очистить(Команда)
	Картинка = Новый Картинка();
	ПоместитьКартинкуВоВременноеХранилище(Картинка);
	УстановитьПараметрыКартинкиНаФорме(Картинка);
	ОбновитьОтображениеДанных(Элементы.АдресДвоичныхДанныхКартинки);
КонецПроцедуры

&НаКлиенте
Процедура СохранитьВФайл(Команда)
	Картинка = КартинкаИзВременногоХранилища();
	
	Если Картинка.Вид = ВидКартинки.Пустая Тогда
		УИ_ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Картинка пустая");
		Возврат;
	КонецЕсли;
	
	ПараметрыСохранения = УИ_ОбщегоНазначенияКлиент.НовыйПараметрыСохраненияФайла();
	ПараметрыСохранения.АдресФайлаВоВременномХранилище = АдресДвоичныхДанныхКартинки;
	
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	ДиалогВыбораФайла.Заголовок = "Сохранение картинки";
	ДиалогВыбораФайла.МножественныйВыбор = Ложь;
#Если Не ВебКлиент Тогда
	ДиалогВыбораФайла.Фильтр = Картинка.ФильтрИменФайлов();
#КонецЕсли
	ПараметрыСохранения.ДиалогВыбораФайла = ДиалогВыбораФайла;
	
	УИ_ОбщегоНазначенияКлиент.НачатьСохранениеФайла(ПараметрыСохранения);
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьВПриложенииПоУмолчанию(Команда)
	//TODO: Вставить содержимое обработчика
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьИзФайла(Команда)
	Картинка = Новый Картинка();
	
	ПараметрыЧтенияФайла = УИ_ОбщегоНазначенияКлиент.НовыйПараметрыЧтенияФайла(УникальныйИдентификатор);
	ПараметрыЧтенияФайла.ОповещениеОЗавершении = Новый ОписаниеОповещения("ЗагрузитьИзФайлаЗаврешениеПомещенияВоВременноеХранилище",
		ЭтотОбъект);
	
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогВыбораФайла.Заголовок = "Чтение картинки";
	ДиалогВыбораФайла.МножественныйВыбор = Ложь;
	ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина;
	ДиалогВыбораФайла.ПредварительныйПросмотр = Истина;
#Если Не ВебКлиент Тогда
	ДиалогВыбораФайла.Фильтр = Картинка.ФильтрИменФайлов();
#КонецЕсли
	ПараметрыЧтенияФайла.ДиалогВыбораФайла = ДиалогВыбораФайла;

	УИ_ОбщегоНазначенияКлиент.НачатьЧтениеФайла(ПараметрыЧтенияФайла);
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция КартинкаИзВременногоХранилища()
	Если Не ЭтоАдресВременногоХранилища(АдресДвоичныхДанныхКартинки) Тогда
		Возврат Новый Картинка();
	КонецЕсли;	
	
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресДвоичныхДанныхКартинки);
	Попытка
		Возврат Новый Картинка(ДвоичныеДанные);
	Исключение
		Возврат Новый Картинка();
	КонецПопытки;
КонецФункции

&НаКлиенте
Процедура ЗагрузитьИзФайлаЗаврешениеПомещенияВоВременноеХранилище(МассивФайлов, ДополнительныеПараметры) Экспорт
	Если МассивФайлов = Неопределено Тогда
		Возврат;
	КонецЕсли;
	Если МассивФайлов.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	УстановитьКартинкуПоПрочитаномуФайлу(МассивФайлов[0]);
КонецПроцедуры

&НаСервере
Процедура УстановитьКартинкуПоПрочитаномуФайлу(ПрочитанныйФайл)
	АдресДвоичныхДанных = ПрочитанныйФайл.Хранение;
	
	
	ДвоичныеДанныеКартинки = ПолучитьИзВременногоХранилища(АдресДвоичныхДанных);
	Попытка
		Картинка = Новый Картинка(ДвоичныеДанныеКартинки);
		АдресДвоичныхДанныхКартинки = АдресДвоичныхДанных;
	Исключение
		УИ_ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не удалось инициализировать картинку: "
															 + ОписаниеОшибки());
		Картинка = Новый Картинка;
		ПоместитьКартинкуВоВременноеХранилище(Картинка);
	КонецПопытки;
	УстановитьПараметрыКартинкиНаФорме(Картинка);
КонецПроцедуры

&НаСервере
Процедура ПоместитьКартинкуВоВременноеХранилище(Картинка)
	ДвоичныеДанныеКартинки = Картинка.ПолучитьДвоичныеДанные();
	АдресДвоичныхДанныхКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки, УникальныйИдентификатор);
КонецПроцедуры

&НаСервере
Процедура УстановитьПараметрыКартинкиНаФорме(Картинка)
	Вид = Картинка.Вид;

	ДвоичныеДанныеКартинки =  Картинка.ПолучитьДвоичныеДанные();
	Если ТипЗнч(ДвоичныеДанныеКартинки) = Тип("ДвоичныеДанные") Тогда
		Размер = ДвоичныеДанныеКартинки.Размер();
	Иначе
		Размер = 0;
	КонецЕсли;
КонецПроцедуры

#КонецОбласти
